#线程
#进程 操作系统调用的基本单位,每打开一个程序至少有一个进程
#线程 cpu调用的基本单位 一个进程至少包含一个线程
#时间模块 time  time.sleep(s) 等待时间多少秒
#多线程
#线程参数 target 执行任务名  args 以元组形式给任务传参  kwargs 以字典形式为任务传参
#__main__ 主程序入口
#导入线程模块
import threading
import time
def a(x):
    time.sleep(1)
    print("A1"+x)
    time.sleep(1)
    print("A2"+x)
def b(x):
    time.sleep(1)
    print("B1"+x)
    time.sleep(1)
    print("B2"+x)
#主程序入口
if __name__ == "__main__":
    t1 = threading.Thread(target=a,args=("A",)) #创建子线程 不要加括号
    t2 = threading.Thread(target=b,args=("B",))
    #守护线程,必须在start前面 主线程结束,子线程也跟着结束
    t1.daemon = True
    t2.daemon = True
    t1.start() #开启子线程
    t2.start()
    #阻塞主线程 join() 必须在start后面 暂停的作用 子线程结束后,主线程才会结束
    t1.join()
    t2.join()
    #打印线程名字
    print(t1.name)
    print(t2.name)
    t1.name = "线程1"
    t2.name = "线程2"
    print(t1.name)
    print(t2.name)
    print("最后打印")